package com.ruoyi.generateTest.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * 主要是调用写好的python脚本来操作文档
 * 确保服务器上有python3环境
 * pip3 install python-docx
 * 还要安装这个包
 *
 * @author top
 * @date 2024/8/18 11:08
 */
public class ModifyDocFormatUtil {
    public static void main(String[] args) throws Exception {
        String inputPath1 = "F:\\study\\项目\\考试系统\\修改格式\\原始.docx";
        String outputPath1 = "F:\\study\\项目\\考试系统\\修改格式\\测试格式改后" + System.currentTimeMillis() + ".docx";
//        ModifyDocFormatUtil.ModifyDocFormat(inputPath1, outputPath1,
//                "22",
//                "仿宋_GB2312", "仿宋_GB2312",
//                "16", "1",
//                "0", "2", "方正小标宋简体",
//                "方正小标宋简体", "22",
//                "28", "1", "0", 0, 0
//        );
        System.out.println("11");

        ModifyDocFormatTemplate(inputPath1,outputPath1);
    }

    /**
     * @param filepath                    文件路径
     * @param savePath                    保存路径
     * @param skipParagraphs              跳过封面段落数量，这里填固定值22
     * @param fontName                    英文字体
     * @param chineseFontName             中文字体
     * @param fontSize                    字号大小（磅）
     * @param lineSpacing                 行间距 如果类型是0，则填1、1.5、2、多倍；如果为1则填磅数
     * @param lineSpacingRule             行间距类型0->单倍行距、1.5倍行距、2倍行距、多倍行距；1->固定值（磅）
     * @param firstLineIndentChars        段落前首行缩进多少 一般填2
     *                                    上面都是设置段落的，下面是标题
     * @param headingFontName             标题英文字体
     * @param headingChineseFontName      标题中文字体
     * @param headingFontSize             标题字体大小
     * @param headingLineSpacing          标题行间距
     * @param headingLineSpacingRule      标题行间距类型
     * @param headingFirstLineIndentChars 标题前首行缩进多少 一般填0
     * @param autoPageBreak               标题是否自动换行 0是 1否
     * @param centerHeading               标题是否居中对齐 0是 1否
     * @throws Exception
     */
    public static void ModifyDocFormat(String filepath,
                                       String savePath,
                                       String skipParagraphs,
                                       String fontName,
                                       String chineseFontName,
                                       String fontSize,
                                       String lineSpacing,
                                       String lineSpacingRule,
                                       String firstLineIndentChars,
                                       String headingFontName,
                                       String headingChineseFontName,
                                       String headingFontSize,
                                       String headingLineSpacing,
                                       String headingLineSpacingRule,
                                       String headingFirstLineIndentChars,
                                       Integer autoPageBreak,
                                       Integer centerHeading
    ) throws Exception {

        //TODO: Python脚本的路径
        String pyPath = "ruoyi-admin/src/main/resources/modify_script.py";

        // 定义传入的参数
//        String filepath = "/path/to/input.docx";
//        String savePath = "/path/to/output.docx";
//        String skipParagraphs = "22";
//        String fontName = "宋体";
//        String chineseFontName = "宋体";
//        String fontSize = "16";
//        String lineSpacing = "1";
//        String line_spacing_rule = "0";

//        String first_line_indent_chars = "0";
//        String heading_font_name  = "0";
//        String heading_chinese_font_name  = "0";
//        String heading_font_size  = "0";
//        String heading_line_spacing  = "0";
//        String heading_line_spacing_rule  = "0";
//        String heading_first_line_indent_chars  = "0";
//        String auto_page_break  = "0";
//        String center_heading  = "0";
//        String insert_toc  = "0";


        // 创建参数数组
//        String[] args1 = new String[]{
//                "python", pyPath, filepath, savePath,
//                "--skip_paragraphs", skipParagraphs,
//                "--font_name", fontName,
//                "--chinese_font_name", chineseFontName,
//                "--font_size", fontSize,
//                "--line_spacing", lineSpacing,
//                "--line_spacing_rule", lineSpacingRule,
//
//                "--first_line_indent_chars", firstLineIndentChars,
//                "--heading_font_name", headingFontName,
//                "--heading_chinese_font_name", headingChineseFontName,
//                "--heading_font_size", headingFontSize,
//                "--heading_line_spacing", headingLineSpacing,
//                "--heading_line_spacing_rule", headingLineSpacingRule,
//                "--heading_first_line_indent_chars", headingFirstLineIndentChars,
//                "--auto_page_break",
//                "--center_heading",
//                "--insert_toc",
//        };
        // 创建ArrayList并添加参数
        ArrayList<String> args1 = new ArrayList<>();
        args1.add("python");
        args1.add(pyPath);
        args1.add(filepath);
        args1.add(savePath);

        if (skipParagraphs != null && !skipParagraphs.isEmpty()) {
            args1.add("--skip_paragraphs");
            args1.add(skipParagraphs);
        }
        if (fontName != null && !fontName.isEmpty()) {
            args1.add("--font_name");
            args1.add(fontName);
        }
        if (chineseFontName != null && !chineseFontName.isEmpty()) {
            args1.add("--chinese_font_name");
            args1.add(chineseFontName);
        }
        if (fontSize != null && !fontSize.isEmpty()) {
            args1.add("--font_size");
            args1.add(fontSize);
        }
        if (lineSpacing != null && !lineSpacing.isEmpty()) {
            args1.add("--line_spacing");
            args1.add(lineSpacing);
        }
        if (lineSpacingRule != null && !lineSpacingRule.isEmpty()) {
            args1.add("--line_spacing_rule");
            args1.add(lineSpacingRule);
        }
        if (firstLineIndentChars != null && !firstLineIndentChars.isEmpty()) {
            args1.add("--first_line_indent_chars");
            args1.add(firstLineIndentChars);
        }
        if (headingFontName != null && !headingFontName.isEmpty()) {
            args1.add("--heading_font_name");
            args1.add(headingFontName);
        }
        if (headingChineseFontName != null && !headingChineseFontName.isEmpty()) {
            args1.add("--heading_chinese_font_name");
            args1.add(headingChineseFontName);
        }
        if (headingFontSize != null && !headingFontSize.isEmpty()) {
            args1.add("--heading_font_size");
            args1.add(headingFontSize);
        }
        if (headingLineSpacing != null && !headingLineSpacing.isEmpty()) {
            args1.add("--heading_line_spacing");
            args1.add(headingLineSpacing);
        }
        if (headingLineSpacingRule != null && !headingLineSpacingRule.isEmpty()) {
            args1.add("--heading_line_spacing_rule");
            args1.add(headingLineSpacingRule);
        }
        if (headingFirstLineIndentChars != null && !headingFirstLineIndentChars.isEmpty()) {
            args1.add("--heading_first_line_indent_chars");
            args1.add(headingFirstLineIndentChars);
        }


        if (autoPageBreak == 0) {
            args1.add("--auto_page_break");
        }
        if (centerHeading == 0) {
            args1.add("--center_heading");
        }
//        if (insertToc==0) {
//            args1.add("--insert_toc");
//        }


        // 创建ProcessBuilder实例并传入参数
        ProcessBuilder pb = new ProcessBuilder(args1);

        // 启动进程
        Process process = pb.start();

        // 获取Python脚本的输出
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        // 等待进程结束
        int exitCode = process.waitFor();
//        System.out.println("Exited with code: " + exitCode);

    }

    /**
     * 固定参数
     * @param filepath
     * @param savePath
     * @throws Exception
     */
    public static void ModifyDocFormatTemplate(String filepath,
                                               String savePath
    ) throws Exception {
        //Python脚本的路径
        String pyPath = "ruoyi-admin/src/main/resources/modify_script_2.py";
        // 创建ArrayList并添加参数
        ArrayList<String> args1 = new ArrayList<>();
        args1.add("python");
        args1.add(pyPath);
        args1.add(filepath);
        args1.add(savePath);
        args1.add("--auto_page_break");
        args1.add("--center_heading");

        // 创建ProcessBuilder实例并传入参数
        ProcessBuilder pb = new ProcessBuilder(args1);

        // 启动进程
        Process process = pb.start();

        // 获取Python脚本的输出
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        // 等待进程结束
        int exitCode = process.waitFor();
    }

}
